"""
# -*- coding: utf-8 -*-
# @Time    : 2023/3/6 11:15
# @Author  : 王摇摆
# @FileName: cross_entropy_error.py
# @Software: PyCharm
# @Blog    ：https://blog.csdn.net/weixin_44943389?type=blog
"""
import numpy as np


# 在本实例中实现交叉熵误差函数
def cross_entropy_error(y, t):
    delta = 1e-7  # 保护性对策，防止数据溢出
    y = -np.sum(t * np.log((y + delta)))

    return y


# 测试数据
y1 = [0.1, 0.05, 0.6, 0.0, 0.05, 0.1, 0.0, 0.1, 0.0, 0.0]  # 表示神经网络的输出，结果值就是概率
y2 = [0.1, 0.05, 0.1, 0.0, 0.05, 0.1, 0.0, 0.6, 0.0, 0.0]  # 表示神经网络的输出，结果值就是概率
t = [0, 0, 1, 0, 0, 0, 0, 0, 0, 0]  # 表示监督数据，将正确的解的标签打在这个数组上

new_y1 = np.array(y1)  # 正确的预测结果
new_y2 = np.array(y2)  # 有问题的预测结果
new_t = np.array(t)

# 计算交叉熵误差
result1 = cross_entropy_error(new_y1, new_t)
result2 = cross_entropy_error(new_y2, new_t)

print(result1)
print(result2)

print(np.argmax(new_y1, axis=0))  # axis必须设置为0，因为一维数组默认是被当成列向量来处理的，设置成为1就报错
print(np.argmax(new_y2, axis=0))
